#include <stdio.h>
#include <stdlib.h>

//***线性表 顺序存储 ->单链表的定义


typedef struct LNode              // 单链表节点类型
{
    int data;             
    struct LNode *next;
}LNode, *LinkList;               // LNode更强调节点（链表里的某个节点）、*LinkList更强调链表（即指向链表第一个节点的指针）


// 不带头结点的单链表

bool InitList(LinkList &L)
{
    L = NULL;                    // 空表
    return true;
}

bool Empty(LinkList L)           // 判断单链表是否为空
{
    if(L == NULL)
    {
        return true;
    }
    else
    {
        return false;
    }
}

bool ListInsert(LinkList &L, int i, int e)
{
    if( i<1 )
    {
        return false;
    }
    if( i==1 )  // 插到第一个节点 特殊处理
    {
        LNode *s = (LNode *)malloc(sizeof(LNode));
        s->data = e;
        s->next = L;  // s 指向第一个节点

        L = s;  // L 指向 s
        return true;
    }

    LNode *p;
    int j=1;   // 当前p指向第几个节点
    p = L;     // p指向第1个节点
    while( p!=NULL && j<j-1)
    {
        p = p->next;
        j++;
    }
    if(p == NULL)
    {
        return false;
    }

    LNode *s = (LNode *)malloc(sizeof(LNode));
    s->data = e;
    s->next = p->next;  // s 指向第i个节点

    p->next = s;        // 第i-1个节点指向 s

    return true;
}












